package com.legendshop.openportal.sdk.model.response.v4;

import com.legendshop.openportal.sdk.model.BaseResponse;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 订单
 *
 * @author EDaoren
 */
@Data
@ApiModel("订单详情响应")
public class OrderDetailV4Response extends BaseResponse {

    private static final long serialVersionUID = -5680450041707852226L;


    /**
     * 订单类型。1是父订单   2是子订单。
     * OrderDetailTypeEnum
     */
    @ApiModelProperty("订单类型。1是父订单  2是子订单。")
    private Integer type;

    /**
     * 订单创建时间。
     * 输出格式为“yyyy-MM-dd hh:mm:ss”
     */
    @ApiModelProperty("订单创建时间")
    private Date createTime;

    /**
     * 订单收货地址相关信息
     */
    @ApiModelProperty("订单收货地址相关信息, 需要在queryExts字段携带 address 标识")
    private UserAddressSubV4Response userAddress;

    /**
     * 买家信息
     * 需要在queryExts字段携带 buyer 标识
     */
    @ApiModelProperty("卖家信息 需要在queryExts字段携带 buyer 标识")
    private Buyer buyer;

    /**
     * 备注信息
     */
    @ApiModelProperty("买家和卖家备注信息")
    private BusinessReMark businessReMark;

    /**
     * 订单完成时间，即收货时间
     * 输出格式为“yyyy-MM-dd hh:mm:ss”
     * 未完成时，此参数返回null。
     */
    @ApiModelProperty("订单完成时间")
    private Date finishTime;

    @Data
    public static class OrderSku implements Serializable {

        private static final long serialVersionUID = -485399627544222971L;

        /**
         * 商品名称
         */
        @ApiModelProperty("商品名称")
        private String name;

        /**
         * 产品动态属性
         */
        @ApiModelProperty("规格属性")
        private String attribute;

        /**
         * 商品ID
         */
        @ApiModelProperty("商品ID")
        private Long prodId;

        /**
         * skuId
         */
        @ApiModelProperty("skuId")
        private Long skuId;

        /**
         * 下单数量
         */
        @ApiModelProperty("下单数量")
        private Integer num;

        /**
         * 商品价格
         * 不包含运费，订单总金额 freight + price * num）
         */
        @ApiModelProperty("商品价格（不包含运费）")
        private BigDecimal price;

        /**
         * 运费拆分价格
         */
        @ApiModelProperty("运费拆分价格")
        private BigDecimal freight;

        /**
         * 商品图片
         */
        @ApiModelProperty("商品图片")
        private String pic;
    }


    /**
     * 卖家信息
     */
    @Data
    public static class Buyer implements Serializable {

        private static final long serialVersionUID = 5627230400117488563L;

        /**
         * 买家用户id
         */
        @ApiModelProperty("买家用户id")
        private Long buyerId;

        /**
         * 微信unionId
         */
        @ApiModelProperty("微信unionId")
        private String wxUnionId;

        /**
         * 昵称
         */
        @ApiModelProperty("昵称")
        private String nickName;

        /**
         * 电话
         */
        @ApiModelProperty("电话")
        private String mobile;
    }

    /**
     * 用户配送地址
     */
    @Data
    public static class UserAddressSubV4Response implements Serializable {

        private static final long serialVersionUID = 1L;

        /**
         * 省份，一级地址，如：广东
         */
        @ApiModelProperty(value = "省份")
        private String province;

        /**
         * 城市，二级地址，如：深圳市
         */
        @ApiModelProperty(value = "城市")
        private String city;

        /**
         * 区县，三级地址，如：南山区
         */
        @ApiModelProperty(value = "区县")
        private String area;

        /**
         * 街道，四级地址，如：科技园
         */
        @ApiModelProperty(value = "街道")
        private String town;

        /**
         * 地址详情，如：广东 深圳市 南山区 科技园 xxxxxxxx
         */
        @ApiModelProperty(value = "地址详情")
        private String detailAddress;

        /**
         * 收货手机
         */
        @ApiModelProperty(value = "收货手机")
        private String mobile;

        /**
         * 收货人姓名
         */
        @ApiModelProperty(value = "收货人姓名")
        private String receiver;

    }

    @Data
    public static class BusinessReMark implements Serializable {

        private static final long serialVersionUID = -485399627544222971L;

        /**
         * 买家备注
         */
        @ApiModelProperty("买家备注")
        private String buyerMessage;

        /**
         * 卖家备注
         */
        @ApiModelProperty("卖家备注")
        private String sellerMessage;
    }

    /**
     * 支付类型
     */
    @Data
    public static class PaymentType implements Serializable {

        private static final long serialVersionUID = -485399627544222971L;

        /**
         * 付款类型
         * PayTypeEnum
         */
        @ApiModelProperty("付款类型")
        private String payTypeId;

        /**
         * 付款类型名称
         */
        @ApiModelProperty("付款类型名称")
        private String payTypeName;

        /**
         * 付款金额
         */
        @ApiModelProperty("付款金额")
        private BigDecimal payAmount;

        /**
         * 付款数量，如：积分数量
         */
        @ApiModelProperty("付款数量，如：积分数量")
        private Integer payNum;

    }

}
